package com.lzp.service;

import com.lzp.pojo.Items;
import com.lzp.pojo.ItemsImg;
import com.lzp.pojo.ItemsParam;
import com.lzp.pojo.ItemsSpec;
import com.lzp.pojo.vo.CommentLevelCountsVO;
import com.lzp.pojo.vo.ShopcartVO;
import com.lzp.utils.PagedGridResult;

import java.util.List;

/**
 * 商品接口
 *
 * @author dtyy
 * @date 2020/8/4
 */
public interface ItemService {

    /**
     * 根据商品id查询详情
     *
     * @param itemId 商品id
     * @return
     */
    Items getItemById(String itemId);

    /**
     * 根据商品id查询商品图片列表
     *
     * @param itemId 商品id
     * @return
     */
    List<ItemsImg> listItemImg(String itemId);

    /**
     * 根据商品id查询商品规格
     *
     * @param itemId 商品id
     * @return
     */
    List<ItemsSpec> listItemSpec(String itemId);

    /**
     * 根据商品id查询商品参数
     *
     * @param itemId 商品id
     * @return
     */
    ItemsParam getItemParam(String itemId);

    /**
     * 查询商品评价数量
     *
     * @param itemId 商品id
     * @return
     */
    CommentLevelCountsVO getCommentCounts(String itemId);

    /**
     * 查询商品评价
     *
     * @param itemId   商品id
     * @param level    评价级别
     * @param page     当前页
     * @param pageSize 每页条数
     * @return
     */
    PagedGridResult queryPagedComments(String itemId, Integer level, Integer page,
                                       Integer pageSize);

    /**
     * 搜索商品
     *
     * @param keywords 关键词
     * @param sort     排序规则
     * @param page     当前页
     * @param pageSize 每页条数
     * @return
     */
    PagedGridResult searchItems(String keywords, String sort, Integer page,
                                Integer pageSize);

    /**
     * 根据第三分类查询商品列表
     *
     * @param catId    第三分类id
     * @param sort     排序规则
     * @param page     当前页
     * @param pageSize 每页条数
     * @return
     */
    PagedGridResult searchItems(Integer catId, String sort, Integer page,
                                Integer pageSize);

    /**
     * 根据商品规格id查询商品数据
     *
     * @param specIds 规格字符串
     * @return
     */
    List<ShopcartVO> queryItemsBySpecIds(String specIds);

    /**
     * 根据规格id查询规格数据以及商品id
     *
     * @param specId 规格id
     * @return
     */
    ItemsSpec queryItemSpecBySpecId(String specId);

    /**
     * 根据商品id查询商品主图
     *
     * @param itemId 商品id
     * @return
     */
    String queryItemMainImgByItemId(String itemId);

    /**
     * 减少库存
     *
     * @param specId    规格id
     * @param buyCounts 购买数量
     */
    void decreaseItemSpecStock(String specId, int buyCounts);

}
